package com.shiyun.disaster_station.validate.service;

import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.shiyun.disaster_station.common.ReturnMap;
import com.shiyun.disaster_station.enums.AlarmStepEnum;
import com.shiyun.disaster_station.enums.AlarmTypeEnum;
import com.shiyun.disaster_station.validate.bean.req.ValidateInsertReq;
import com.shiyun.disaster_station.validate.bean.req.ValidateParseInfoReq;
import org.springframework.stereotype.Service;

/**
 * 类 描 述: 告警解析校验业务层
 * 作   者: 史 云
 * 版   本: 1.0.0
 * 时   间: 2022年01月11日  10:00:00
 */
@Service
public class ValidateService {
    /**
     * 方法描述: 校验告警解析
     * 作    者: 史 云
     * 时    间: 2022年08月24日  11:09:03
     */
    public ReturnMap insert(ValidateInsertReq param) {
        AlarmTypeEnum type = param.getType();
        switch (type) {
            case EARTH_QUAKE:
                validateEarthQuake(param);
                break;
            case CATCHMENT:
                break;
            case SHORT_RAIN:
                break;
            case VIRTUAL_RAINGAUGE:
                break;
            case RAINGAUGE:
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + type);
        }
        return ReturnMap.ok();
    }

    /**
     * 方法描述: 地震校验
     * 作    者: 史 云
     * 时    间: 2022年08月24日  11:20:38
     */
    private void validateEarthQuake(ValidateInsertReq param){
        // 创建入参
        ValidateParseInfoReq req = new ValidateParseInfoReq();
        req.setType(AlarmTypeEnum.EARTH_QUAKE);
        // TODO 第一步 新增入库【页面】【采集】【推送】

        // TODO 第二步 加入队列

        // 第三步 获取告警类型
        req.setStep(AlarmStepEnum.THREE);
        String body = HttpUtil.createPost(param.getUrl()).body(JSONUtil.toJsonStr(req)).execute().body();

        // 第四步 获取最大影响范围

        // 第五步 判断告警是否在范围内

        // 第六步 新增地震信息

        // 第七步 计算点标识

        // 第八步 计算站点

        // 第九步 计算区间

        // 第十步 计算线路

        // 第十一步 计算里程

    }
}

